/*
 * @Author: 噜噜噜 1163376226@qq.com
 * @Date: 2025-03-28 14:54:21
 * @LastEditors: 噜噜噜 1163376226@qq.com
 * @LastEditTime: 2025-04-25 16:11:17
 * @FilePath: /auto/automation-project/js/apiConfig.js
 * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
 */
// API配置中心
/**
 * API配置中心
 * @typedef {Object} EnvironmentConfig
 * @property {string} development 开发环境
 * @property {string} testing 测试环境
 * @property {string} production 生产环境
 */

const apiConfig = {
  // 多环境域名配置
  baseURLs: {
    local: "http://127.0.0.1:5001/api",
    development: "https://dev-api.example.com",
    testing: "https://mock.apipost.net/mock/349ae1/",
    production: "https://api.example.com",
  },

  // 当前运行环境 (可通过环境变量覆盖)
  currentEnv: "local", // 当前使用测试环境配置
  // currentEnv: "testing", // 当前使用测试环境配置
  // 模块化路由配置
  modules: {
    /**
     * 场景管理模块
     * @type {{list: string, create: string, update: string, test: string}}
     */
    scenarios: {
      list: "/scenarios",
      create: "/scenarios",
      update: "/scenarios",
    },

    /**
     * 测试管理模块
     * @type {{status: string}}
     */
    tests: {
      // mock 参数
      status: "/status?",
    },

    /**
     * 模块管理，list：获取，create：新增
     * @type {{list: string, create: string}}
     */
    modules: {
      list: "/modules",
      create: "/modules",
      by_scenarios_id: "/by_scenarios_id?scenariosId={id}",
    },

    /**
     * 元素管理，新建元素
     * @type {{list: string, actionTypes: string, selectors: string, createSelector: string}}
     */
    elements: {
      // mock 参数
      create: "/elements",
      update: "/elements",
      // mock 参数
      delete: "/elements",
    },

    /**
     * 操作类型，获取元素类型
     * @type {{list: string}}
     */
    action_types: {
      list: "/action_types",
    },

    /**
     * 元素选择器，获取元素选择器
     * @type {{list: string}}
     */
    selectors: {
      list: "/selectors",
    },

    /**
     * 按照模块获取元素
     * @type {{list: string}}
     */
    modules_id: {
      list: "/by_modules_id?",
    },
  },

  /**
   * 生成完整API URL
   * @param {string} moduleName 模块名称
   * @param {string} methodName 方法名称
   * @param {Object} [params] 路径参数
   * @param {Object} [params.pathParams] 路径参数对象
   * @returns {string} 完整API URL
   */
  getURL: function (moduleName, methodName, params = {}) {
    const baseURL = this.baseURLs[this.currentEnv];
    let path = this.modules[moduleName][methodName];

    // 类型校验
    if (!this.modules[moduleName]) {
      throw new Error(`无效模块: ${moduleName}`);
    }
    if (!this.modules[moduleName][methodName]) {
      throw new Error(`模块 ${moduleName} 中不存在方法: ${methodName}`);
    }

    // 替换路径参数并进行编码
    for (const [key, value] of Object.entries(params.pathParams || {})) {
      path = path.replace(`{${key}}`, encodeURIComponent(value));
    }

    // 拼接完整URL
    return `${baseURL}${path}`;
  },
};

export default apiConfig;
